package queixa.reps;

import queixa.Queixa;
import util.Excecoes;
import excecoes.ObjetoInexistenteException;
import excecoes.RepositorioException;

public class RepositorioQueixaArray implements IRepositorioQueixa {

	private Queixa[] vetor;

	private int indice;

	private int geraCodigo = 0; // para gerar codigos das queixas cadastradas

	public RepositorioQueixaArray() {
		vetor = new Queixa[100];
		indice = 0;
	}

	public int insere(Queixa q) throws RepositorioException {

		q.setCodigo(geraCodigo++);
		if (indice == this.vetor.length) {
			throw new RepositorioException(Excecoes.EXC_FALHA_INCLUSAO_VOLATIL);
		}
		this.vetor[indice] = q;
		indice++;
		return vetor[indice - 1].getCodigo();
	}

	public void atualiza(Queixa q) throws RepositorioException,
			ObjetoInexistenteException {
		boolean achou = false;
		for (int i = 0; i < indice && !achou; i++) {
			if (this.vetor[i].getCodigo() == q.getCodigo()) {
				vetor[i] = q;
				achou = true;
			}
		}
		if (!achou)
			throw new ObjetoInexistenteException(Excecoes.EXC_FALHA_ATUALIZACAO);
	}

	public void deleta(int codigo) throws RepositorioException,
			ObjetoInexistenteException {
	}

	public boolean existe(int codigo) throws RepositorioException {

		//int indiceAux = 0;
		boolean existe = false;

		for (int i = 0; i < indice; i++) {
			if (this.vetor[i].getCodigo() == codigo) {
				//indiceAux = i;
				existe = true;

				break;
			}
		}

		return existe;
	}

	public Queixa procura(int codigo) throws RepositorioException,
			ObjetoInexistenteException {

		int i = 0;

		while (i < indice) {
			if (vetor[i].getCodigo() == codigo) {
				return vetor[i];
			}

			i++;
		}

		throw new ObjetoInexistenteException(Excecoes.EXC_FALHA_PROCURA);
	}

	public int size() {
		return this.indice;
	}

	public Queixa getElemento(int posicao) {
		if (posicao < indice)
			return this.vetor[posicao];
		else
			return null;
	}
}
